#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "../src/string.h"

/*
 * string_t testing unit
 * compile with: gcc ../src/string.o ../src/array.o ../src/xmalloc.o -lm teststr.c -o teststr
 */

#define TEST_STR0 "This is a simple test string."
#define TEST_STR1 "This string should be added to the first string."
#define TEST_STR2 "abc"
#define REPL_STR0 "string"
#define REPL_STR1 "text"
#define INST_STR0 "This string should be inserted after the first sentence."

int
main(int argc, char **argv)
{
/* string testing stuff */
  size_t len;
  string_t *str = create_empty_string();
  if (get_strlen(str) != 0) return(1);
  if (strcmp(get_string(str), "") != 0) return (99);
  if (str->used != 1) return (1);
  free_string(str);
  str = create_empty_string();
  add_string(str, TEST_STR0);
  if (str->used != strlen(TEST_STR0)+1) return (98);
  if (get_strlen(str) != strlen(TEST_STR0)) return (97);
  set_nstring(str, TEST_STR2, 3);

  if (get_strlen(str) != 3) return (1);

  set_string(str, TEST_STR0);
  len = strlen((char *)TEST_STR0);
  if (get_strlen(str) != len) return (2);

  del_string(str, len-1, 1);
  add_string(str, "! ");
  len++;

  add_string(str, TEST_STR1);
  len += strlen((char *)TEST_STR1);
  if (get_strlen(str) != len) return (3);

  len -= (replace_string(str, "string", "text", 4) * (strlen(REPL_STR0) - strlen(REPL_STR1)));
  if (len != get_strlen(str)) return (4);

  len += strlen(INST_STR0)+1;
  insert_string(str, strlen(TEST_STR0)-2, " " INST_STR0, strlen(INST_STR0)+1);
  if (len != get_strlen(str)) return (5);

/* everything is OK */
  printf("%s\n", get_string(str));
  free_string(str);

  return (0);
}

